Question
https://github.com/anthropics/skills/blob/main/skills/algorithmic-art/SKILL.md 这是一个关于AI skill 的项目,在 Cursor 中也有 rules , Skills,Subagents,也有 mcp。对于我的理解来说,Cursor 中的 rules 和 skills 对我来说都是一个.md 文档,一个你写好规则让 AI 去阅读理解你的规范的。但是实际的 skills 里面可以是
my-skill/
├── SKILL.md # 必需:指令 + 元数据
├── scripts/ # 可选:可执行代码
├── references/ # 可选:文档
└── assets/ # 可选:模板、资源
我其实不太明白这些东西到底有什么作用,还有比如说 mcp 也是一个代码工具。我这样举例吧:请使用掘金文章技能,返回后端类型的前5的文章链接
我们期待当前SpringAI可以通过调用掘金文章技能,帮助我们返回前5的文章链接,
此技能用于获取掘金(juejin.cn)网站的技术文章排行榜数据,包括:
文章分类列表(前端、后端、AI、移动开发等)
各分类的热门文章排行榜
文章详细信息(标题、作者、阅读量、点赞数等)
接下来,我们启动程序,然后看下程序最终的访问结果,可以看到成功出发了掘金技能,获取到了结果:
这个用 mcp 也可以做,直接写代码爬取也可以用,为什么要这么麻烦,skill 是在教育 AI 适用工具吗,那为什么不用 mcp 了核心概念对比
1. Rules(规则)
本质:告诉 AI "你是谁、你应该怎么做"
Rules 是纯粹的行为约束和上下文注入。比如:
- "始终使用中文回答"
- "代码风格遵循 Google Java Style"
- "提交信息使用 Conventional Commits 格式"
它不包含任何可执行逻辑,只是给 AI 设定"人格"和"规范"。
2. MCP(Model Context Protocol)
本质:给 AI 一个真正可调用的外部工具/API
MCP 是一个标准化的工具协议,让 AI 可以像调用函数一样调用外部能力。比如你项目里的 cursor-ide-browser MCP,它提供了 browser_navigate、browser_snapshot 等工具,AI 可以直接调用它们来操控浏览器。
关键特点:
- 有明确的输入/输出 schema
- AI 自己决定何时调用、传什么参数
- 是一个运行时的工具
3. Skills(技能)
本质:一套完整的"教程+工具包",教 AI 如何完成一类复杂任务
这是你最困惑的部分。Skills 的关键在于——它不仅仅是一个 .md 文档,而是一个包含策略、脚本、参考资料的完整方案包。
回答你的核心疑问:为什么不直接用 MCP?
用你的掘金文章例子来说明:
方案 A:直接写代码
*// 硬编码爬取逻辑*
HttpClient.get("https://api.juejin.cn/content_api/v1/content/article_rank?category_id=6809637769959178254")问题:这段代码只能做这一件事,换个需求就得重写。而且 AI 不知道怎么用它。
方案 B:用 MCP
你可以写一个 MCP Server,暴露一个工具:
{
"name": "get_juejin_articles",
"parameters": { "category": "string", "limit": "number" }
}AI 可以调用 get_juejin_articles(category="backend", limit=5)。
这完全可行! 但你需要:
- 自己写一个 MCP Server(Node.js/Python 服务)
- 处理 API 认证、错误处理、数据格式化
- 部署和维护这个服务
方案 C:用 Skill
juejin-skill/
├── SKILL.md # 告诉 AI:"当用户问掘金文章时,执行以下步骤..."
├── scripts/
│ └── fetch_articles.sh # 一个 curl 脚本,直接调用掘金 API
└── references/
└── juejin_api.md # 掘金 API 文档,分类 ID 对照表等SKILL.md 里会写:
- 先读取
references/juejin_api.md了解 API 格式- 根据用户需求确定分类 ID
- 执行
scripts/fetch_articles.sh获取数据- 按格式返回结果
三者的本质区别
| Rules | MCP | Skills | |
|---|---|---|---|
| 是什么 | 行为规范 | 可调用的工具 | 任务完成方案 |
| 类比 | 员工手册 | 一把锤子 | 一本操作手册 + 工具箱 |
| AI 角色 | 遵守规则 | 调用工具 | 阅读方案后自主执行 |
| 开发成本 | 写 .md | 写服务端代码 | 写 .md + 可选脚本 |
| 灵活性 | 只约束行为 | 固定的输入输出 | AI 可以灵活组合步骤 |
关键洞察:Skill 是在"教育 AI 使用工具"吗?
是的,但不完全是。 更准确地说:
- MCP 是给 AI 一个"按钮"——AI 按下去就有结果,但 AI 只知道按钮的功能,不理解背后的逻辑。
- Skill 是给 AI 一套"SOP(标准操作流程)"——AI 读完后理解整个任务的上下文、策略、注意事项,然后用它已有的能力(包括 MCP、Shell、代码执行等)去完成任务。
Skill 的真正价值在于:它可以编排多个工具和步骤,而且几乎零开发成本。
举个更复杂的例子:你截图里展示的那个 algorithmic-art Skill,它教 AI 如何创作算法艺术。这个任务涉及:
- 创作艺术哲学(纯文本推理)
- 读取 HTML 模板(文件操作)
- 编写 p5.js 代码(代码生成)
- 生成交互式控件(UI 设计)
这种多步骤、需要策略指导的复合任务,用 MCP 很难表达——你不可能写一个 create_algorithmic_art() 的 MCP 工具。但一个 Skill 文档就能教会 AI 整套流程。
什么时候该用什么?
- 用 Rules:当你只需要约束 AI 的行为风格、编码规范时
- 用 MCP:当你需要 AI 访问一个明确的外部服务/API,且交互模式是简单的请求-响应时
- 用 Skills:当任务是复杂的、多步骤的、需要策略指导的,且你不想(或不需要)写一个完整的服务时
- 用代码:当逻辑是应用核心功能的一部分,需要在生产环境稳定运行时
回到你的掘金例子——如果只是偶尔查一下文章排行,Skill 最轻量;如果是你应用的核心功能需要频繁调用,MCP 或直接写代码更合适。它们不是互斥的,而是不同抽象层次的工具。
Question
解释下https://github.com/anthropics/skills/blob/main/skills/algorithmic-art/SKILL.md 这个skill 概念的提起者和发明者,或者说解决了什么题。比如我要从 0-1 开发一个旅游出行的项, 我除了设计系统架构和需求之外,我是不是针对每个需求都要写个 skill,让AI 根据我这个去写代码了,像是项目经理安排程序开发员去写代码一样
Skill 这个概念的来源和它解决的问题
谁提出的?
Skill 这个概念在 AI Agent 领域并不是某一个人"发明"的,而是一个逐步演化的共识:
- Anthropic(Claude 的开发公司)在 2025 年正式推出了 Skills 规范,将它标准化为
SKILL.md+scripts/+references/的结构。你看到的algorithmic-art就是 Anthropic 官方的示例。 - Cursor 也采纳了这个概念,在 IDE 中集成了 Skills 机制。
- Spring AI Community 则进一步把它做成了 Java 生态的工具库(
spring-ai-agent-utils),让 Spring AI 应用也能加载和使用 Skills。
它解决的核心问题是什么?
问题的本质:AI 什么都会一点,但什么都不精。
大语言模型知道"怎么处理 PDF",但它不知道你的团队处理 PDF 时的最佳实践、偏好的工具链、以及特定的注意事项。Skill 解决的是:把领域专家的知识打包成 AI 可以消费的格式。
用一个更直白的类比:
| 场景 | 没有 Skill | 有 Skill |
|---|---|---|
| 你让 AI 优化电脑 | AI 给你一堆通用建议 | AI 先执行脚本获取你的真实数据,再按指定话术给出针对性建议 |
| 你让 AI 处理 PDF | AI 凭记忆推荐库和方法,可能过时 | AI 严格按你验证过的脚本和文档来做 |
| 你让 AI 做算法艺术 | AI 随便画个 Canvas | AI 严格按模板结构、品牌规范、交互要求来创作 |
为什么不用 MCP 替代?
这是你问题的核心。答案是:它们解决的问题不在同一个层面。
让我画一个层次图:
┌─────────────────────────────────────────┐
│ Skill(策略层) │
│ "当用户要优化电脑时: │
│ 1. 先执行 get_system_info.sh │
│ 2. 再执行 check_cleanable_files.sh │
│ 3. 按 reference.md 的话术风格输出 │
│ 4. 用真实用户名替换模板中的称呼" │
├─────────────────────────────────────────┤
│ MCP / 脚本执行(能力层) │
│ "执行一个 shell 脚本" / "调用一个 API" │
├─────────────────────────────────────────┤
│ 底层代码(实现层) │
│ curl / Python / Java 具体实现 │
└─────────────────────────────────────────┘- MCP 是单个工具的标准化接口——"我能调用什么"
- Skill 是一套完整的行为方案——"我应该怎么做、先做什么后做什么、输出什么风格"
Skill 里可以包含 MCP 调用,也可以包含脚本执行,也可以只包含纯文本指导。它是一个更高层的编排概念。
举个具体对比:
掘金文章获取——用 MCP:
MCP 工具: get_juejin_articles(category, limit) → 返回 JSON 数据
AI 调用这个工具,得到数据,结束。
掘金文章获取——用 Skill:
# SKILL.md
当用户需要获取掘金文章时:
- 先确认用户要哪个分类(前端/后端/AI/...)
- 执行 scripts/fetch_articles.py 获取数据
- 对结果按热度排序
- 输出格式:标题 + 作者 + 链接 + 热度指标
- 如果热度差距很大,额外点评为什么第一名这么火
看到区别了吗?Skill 不只是"获取数据",还包含了怎么理解用户意图、怎么处理数据、怎么呈现结果的完整策略。
三、回到你的旅游项目问题
"如果我从 0-1 开发一个旅游出行项目,是不是每个需求都要写个 Skill?"
绝对不是! 这是一个常见的误解。
你需要区分:谁在用这些 Skill
场景 A:你用 Cursor/AI 辅助开发(开发期)
这时候 Skill 是给 Cursor 里的 AI 助手 用的。你可能会写:
- 一个 Rule:告诉 AI "本项目使用 DDD 架构,数据库用 MySQL,ORM 用 MyBatis"
- 一两个 Skill(可选):比如"生成新接口"Skill,告诉 AI 新接口要同时创建 Controller、Service、Repository、DTO,按什么命名规范
但你不需要为每个需求写 Skill。大多数需求,你直接用自然语言告诉 AI 就行了。
场景 B:你的旅游应用本身集成了 AI Agent(运行期)
如果你的旅游 App 有一个 AI 客服/旅行规划师,那你可能需要给这个 AI Agent 配备 Skills:
- 酒店推荐 Skill:教 AI 怎么调用酒店 API、怎么根据用户偏好排序、怎么展示结果
- 行程规划 Skill:教 AI 考虑交通、时间、景点开放时间等约束条件
- 天气查询:这个简单,用 MCP 就够了,一个工具调用搞定
总结判断标准
| 需求特点 | 用什么 |
|---|---|
| 简单的数据查询(天气、汇率) | MCP 或直接代码 |
| 需要策略指导的复杂任务 | Skill |
| AI 的行为规范和代码风格 | Rules |
| 应用核心业务逻辑 | 直接写代码,这不是 AI 运行时做的事 |
Skill 不是项目经理分配任务单,而是"领域专家手册"。 你不需要为每个需求都写 Skill,只需要为那些"AI 不看手册就会做错/做得不好"的复杂场景写 Skill。对于旅游项目,可能 3-5 个关键 Skill 就够了,大部分功能还是正常写代码。